//存 登陆, 注册接口
//加载db 模块
const db = require('../db');
//加载utility模块,用于对密码md5加密
/* const utility = require('utility')
const md5 = utility.md5() */
const { md5 } = require('utility');

//加载 jsonwebtoken 模块
const jwt = require('jsonwebtoken')
//1.加载 express 模块
const express = require('express');
const e = require('express');
// 2.创建router对象, 实则是函数
const router = express.Router();

//自定义一个中间件,完成数据验证
router.use((req, res, next) => { 
    let { username, password } = req.body;
    if (/^[a-zA-Z]\w{1,9}$/.test(username) === false) {
        next('用户名2~10位,只能用数字、字母、下划线,且字母开头');
    } else if (/^\S{6,12}$/.test(password) === false) { 
        next('密码6~12位,且不能出现空格');
    } else {
        next();
    }
    
})

// 3.把接口挂载到路由对象上
//--------------- 注册接口 -----------------

router.post('/reguser', (req, res) => {
    // 1. 接收客户端提交的账号和密码
    // req.body 表示接收到的请求体
    // console.log(req.body); // { username: 'laotang', password: '123456' } 
    let { username, password } = req.body;
    // let username = req.body.username;
    // let password = req.body.password;
    // 2. 判断，用户名是否已经存在
    db(`select * from user where username='${username}'`, (e, r) => {
      if (e) throw e;
      // console.log(r); // 如果查询到结果r是非空数组；  如果没查到结果r是空数组
      if (r.length > 0) {
        res.send({ status: 1, message: '用户名已存在' });
      } else {
        // 添加之前，需要对密码进行md5加密
        password = md5(password);
        // 3. 添加到user表
        db(`insert into user set username='${username}', password='${password}'`, (err, result) => {
          if (err) throw err;
          // 4. 做出响应
          res.send({ status: 0, message: '注册成功' });
        });
      }
    });
  });
  // ---------- 登陆接口 ------------------------
  router.post('/login', (req, res) => { 
    // console.log(req.body)
    let { username, password } = req.body;
    //加密
    password = md5(password);
    let sql = `select * from user where username='${username}' and password='${password}'`;
    db(sql, (err, result) => { 
      if (err) throw err;
      // console.log(result);
      if (result.length > 0) {
        //登陆成功,创建token
        // let token = jwt.sign(需要保存的数据, 秘钥, [配置项, 生成token之后的回调函数])
        let token = jwt.sign({ id: result[0].id }, 'adsf2ds', { expiresIn: '2h' });
        
        //说明查到结果了,用户名密码正确
        res.send({ status: 0, message: '登陆成功', token: 'Bearer' + token })
      } else { 
        //没有查到结果,错误
        res.send({ status: 1, message: '用户名密码错误'})
      }
    })
  })

//错误处理中间件
router.use((err, req, res, next) => { 
    //统一错误处理
    res.send({status: 1, message: err})
}) 
// 4.导出路由对象(函数)
module.exports = router;